package com.yuanzong.wuliu.service.admin.system.notice;

import com.yuanzong.wuliu.common.exception.BusinessException;
import com.yuanzong.wuliu.common.utils.id.SnowFlakeUtils;
import com.yuanzong.wuliu.common.vo.ApiResult;
import com.yuanzong.wuliu.common.vo.ApiResultPage;
import com.yuanzong.wuliu.controller.admin.system.notice.param.*;
import com.yuanzong.wuliu.controller.intercdeptor.AdminHandlerInterceptorAdapter;
import com.yuanzong.wuliu.model.system.notice.SystemNotice;
import com.yuanzong.wuliu.model.system.notice.query.SystemNoticePageQuery;
import com.yuanzong.wuliu.model.system.user.SystemUser;
import com.yuanzong.wuliu.service.system.notice.factory.SystemNoticeFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

@Service
public class AdminSystemNoticeService {

    public ApiResult page(AdminSystemNoticePageParam param) throws Exception {
        // ===================================================================================//
        // ===== 当前登陆用户
        // ===================================================================================//
        SystemUser runtimeUser = AdminHandlerInterceptorAdapter.getRuntimeUser();
        // ===================================================================================//
        // ===== 参数校验
        // ===================================================================================//
        if (param == null) {
            throw new BusinessException("参数为空");
        }
        // ===================================================================================//
        // ===== 业务执行
        // ===================================================================================//
        SystemNoticePageQuery systemNoticePageQuery = new SystemNoticePageQuery();
        BeanUtils.copyProperties(param, systemNoticePageQuery);
        ApiResultPage<SystemNotice> apiResultPage = SystemNoticeFactory.getSystemNoticeService().pageSubject(systemNoticePageQuery);
        return ApiResult.success(apiResultPage);
    }

    public ApiResult add(AdminSystemNoticeAddParam param) throws Exception {
        // ===================================================================================//
        // ===== 当前登陆用户
        // ===================================================================================//
        SystemUser runtimeUser = AdminHandlerInterceptorAdapter.getRuntimeUser();
        // ===================================================================================//
        // ===== 参数校验
        // ===================================================================================//
        if (param == null) {
            throw new BusinessException("参数为空");
        }
        // ===================================================================================//
        // ===== 业务执行
        // ===================================================================================//
        SystemNotice systemNotice = new SystemNotice();
        BeanUtils.copyProperties(param, systemNotice);
        systemNotice.setId(SnowFlakeUtils.getId());
        systemNotice.setCreateTime(LocalDateTime.now());
        SystemNoticeFactory.getSystemNoticeService().save(systemNotice);
        return ApiResult.success();
    }

    public ApiResult modify(AdminSystemNoticeModifyParam param) throws Exception {
        // ===================================================================================//
        // ===== 当前登陆用户
        // ===================================================================================//
        SystemUser runtimeUser = AdminHandlerInterceptorAdapter.getRuntimeUser();
        // ===================================================================================//
        // ===== 参数校验
        // ===================================================================================//
        if (param == null) {
            throw new BusinessException("参数为空");
        }
        SystemNotice systemNotice = SystemNoticeFactory.getSystemNoticeService().getById(param.getId());
        if (systemNotice == null) {
            throw new BusinessException("公告不存在");
        }
        // ===================================================================================//
        // ===== 业务执行
        // ===================================================================================//
        BeanUtils.copyProperties(param, systemNotice);
        SystemNoticeFactory.getSystemNoticeService().updateById(systemNotice);
        return ApiResult.success();
    }

    public ApiResult info(AdminSystemNoticeInfoParam param) throws Exception {
        // ===================================================================================//
        // ===== 当前登陆用户
        // ===================================================================================//
        SystemUser runtimeUser = AdminHandlerInterceptorAdapter.getRuntimeUser();
        // ===================================================================================//
        // ===== 参数校验
        // ===================================================================================//
        if (param == null) {
            throw new BusinessException("参数为空");
        }
        // ===================================================================================//
        // ===== 业务执行
        // ===================================================================================//
        SystemNotice systemNotice = SystemNoticeFactory.getSystemNoticeService().getById(param.getId());
        return ApiResult.success(systemNotice);
    }

    public ApiResult remove(AdminSystemNoticeRemoveParam param) throws Exception {
        // ===================================================================================//
        // ===== 当前登陆用户
        // ===================================================================================//
        SystemUser runtimeUser = AdminHandlerInterceptorAdapter.getRuntimeUser();
        // ===================================================================================//
        // ===== 参数校验
        // ===================================================================================//
        if (param == null) {
            throw new BusinessException("参数为空");
        }
        // ===================================================================================//
        // ===== 业务执行
        // ===================================================================================//
        SystemNoticeFactory.getSystemNoticeService().removeById(param.getId());
        return ApiResult.success();
    }
}
